Reliable transport protocols are used in networking systems to ensure data is correctly received when errors in the transmission occur. In general, reliable transport protocols assign sequential sequence numbers to packets when the packets are first transmitted. When the packets are received at the destination (either at the next hop, or at their ultimate destination), the receiver transmits an acknowledgement packet back to the originator indicating which sequence number was received. Packets that are not acknowledged are typically re-queued and retransmitted by the originator after a predefined timeout duration occurs. However, in conventional reliable transport systems, when a node detects a timeout (i.e., that an acknowledgement has not been received), it resends all the packets it has queued up for that node. This has the disadvantage of flooding the network with many packets. If the communications difficulties that prevent successful transmission to the endpoint are not resolved, all of the packets will be discarded. The consumption of communications resources by the retransmission of all unsuccessfully communicated packets can adversely affect the operation of unrelated nodes in the network that are not experiencing difficulties since the availability of the shared communications resources will be reduced.
Therefore a need exists to overcome the problems with the prior art as discussed above.